package n_11;

/**
 * @author ChengMiao
 * @title: 11. 盛水最多的容器
 * @projectName leet-code-record
 * @description: TODO
 * @date 2023/4/7 15:15
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 *
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 * 返回容器可以储存的最大水量。
 *
 * 说明：你不能倾斜容器。
 */
public class Demo {

    public static void main(String[] args) {

        int arr[] = {1,8,6,2,4,5,6,8};
        System.out.println(maxArea(arr));

    }

    /**
     * 我的
     */
    public static int maxArea2(int[] height) {
        // 1,8,6,2,5,4,8,3,7

        /**
         *  -----
         *  1 * 8 = 8
         *  -----
         *  1 * 7 = 7
         *  2 * 7 = 14
         *      ...
         *  7 * 7 = 49
         *  -----
         *  1 * 6 = 6
         *  6 * 6 = 36
         *  -----
         *  2 * 5 = 10
         *  -----
         *  5 * 4 = 20
         *  -----
         *  4 * 3 = 12
         *  -----
         *  7 * 2 = 14
         *  -----
         *  3 * 1 = 3
         *
         */

        int len = height.length;
        int max  = 0;

        for (int i = 0; i < height.length-1; i++) {
            int x1 = height[i];
            // 找到i之后最大的值
            for (int j = i+1; j < height.length ; j++) {
                int i1 = height[j];
                int k = j - i; // 索引路径

                int min = Math.min(x1, i1);

                int s = min * k;
                if(max < s){
                    max = s;
                }
            }

        }

        return max;
    }


    /**
     * 官方
     */
    public static int maxArea(int[] height) {
        int i = 0, j = height.length - 1, res = 0;
        while (i < j) {
            res = height[i] < height[j] ?
                    Math.max(res, (j - i) * height[i++]) // 如果后者更大 则用前者值 * 路径距离即为最大矩形面积
                    : Math.max(res, (j - i) * height[j--]); // 如果前者更大 则用后者值 * 路径距离即为最大矩形面积
        }
        return res;
    }
}
